package com.framework.dao;

import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.framework.entity.log.LogAccount;
import com.framework.entity.log.LogTranInfo;
import com.framework.entity.tran.TranBenefitDay;
import com.framework.entity.tran.TranTransactionInfo;
import com.framework.view.TranAmountView;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 功能描述: 交易
 *
 * @author ck
 * @date 2018/9/6 13:54
 */
public interface TransactionInfoDao extends BaseMapper<TranTransactionInfo> {
	/**
	 * 交易综合
	 * @param agentId
	 * @param type
	 * @param isOwn
	 * @return
	 */
	BigDecimal queryTransactionSum(@Param("agentId") Long agentId, @Param("type") int type,@Param("isOwn")Integer isOwn);

	/**
	 * 查询本月、昨天的团队交易量
	 * @param agentId
	 * @param month
	 * @return
	 */
	List<TranBenefitDay> listDayList(@Param("agentId") Long agentId, @Param("month") String month);

	/**
	 * 交易管理明细
	 * @param agentId
	 * @param time
	 * @param types
	 * @param deptId
	 * @param terType
	 * @return
	 */
	List<TranAmountView> queryTransactionTimeList(@Param("agentId")Long agentId,@Param("time")String time,@Param("types")String types,@Param("deptId")Long deptId,@Param("terType")Integer terType);

	/**
	 * 昨天的团队、自营交易
	 * @param agentId
	 * @param types
	 * @param terminalType
	 * @param isVip
	 * @return
	 */
	BigDecimal queryLastPrice(@Param("agentId")Long agentId, @Param("types")String types,@Param("terminalType")Integer terminalType,@Param("isVip")String isVip);

	/**
	 * 天的交易 1:自营 2:团队
	 * @param agentId
	 * @param types
	 * @param dayTime
	 * @param deptId
	 * @return
	 */
	BigDecimal getDayTranAmount(@Param("agentId")Long agentId,@Param("types")Integer types,@Param("dayTime")String dayTime,@Param("deptId") Long deptId);

	/**
	 * 月的交易 1:自营 2:团队
	 * @param agentId
	 * @param types
	 * @param monthTime
	 * @param deptId
	 * @return
	 */
	BigDecimal getMonthTranAmount(@Param("agentId")Long agentId,@Param("types")Integer types,@Param("monthTime")String monthTime,@Param("deptId") Long deptId);

	/**
	 * 交易管理明细
	 * @param agentId
	 * @param time
	 * @param types
	 * @param deptId
	 * @param terType
	 * @return
	 */
	List<TranAmountView> queryTranTimeList(@Param("agentId")Long agentId, @Param("time")String time, @Param("types")String types, @Param("deptId")Long deptId, @Param("terType")Integer terType);

	/**
	 * 根据渠道查询终端类型
	 * @param deptId
	 * @return
	 */
	List<TranAmountView> queryTerminalTypeList(@Param("deptId")Long deptId);

	/**
	 * 根据类型、时间查询
	 * @param agentId
	 * @param time
	 * @param types
	 * @param terminalType
	 * @param terType
	 * @return
	 */
	BigDecimal queryAmountByType(@Param("agentId")Long agentId, @Param("time")String time, @Param("types")String types, @Param("terminalType")Integer terminalType, @Param("terType")Integer terType);

	/**
	 * 查询合伙人的上个月所有交易量
	 * @param agentId
	 * @return
	 */
	BigDecimal queryLMonthTranSum(@Param("agentId") Long agentId);

	/**
	 * 插入数据
	 * @param transactionInfo
	 * @return
	 */
	Integer insertTransaction(@Param("ex") TranTransactionInfo transactionInfo);

	/**
	 * 查询所有交易列表
	 * @param params
	 * @return
	 */
	List<Map<String,Object>> queryTranList(Map<String,Object> params);

	/**
	 * 交易数量 后台
	 * @param params
	 * @return
	 */
	Integer queryTranCount(Map<String,Object> params);

	/**
	 * 查询交易金额 后台
	 * @param params
	 * @return
	 */
    List<BigDecimal> queryAmountList(Map<String,Object> params);

	/**
	 * 个人交易总额
	 * @param params
	 * @return
	 */
    BigDecimal queryPersonTotalAmount(Map<String,Object> params);

	/**
	 * 个人自身交易总额
	 * @param params
	 * @return
	 */
	BigDecimal queryPersonOwnerAmount(Map<String,Object> params);

	/**
	 * 个人旗下团队
	 * @param params
	 * @return
	 */
    BigDecimal queryPersonTeamAmount(Map<String,Object> params);

	/**
	 * 个人交易详情
	 * @param params
	 * @return
	 */
	List<Map<String,Object>> queryPersonTradeDetail(Map<String,Object> params);

	/**
	 * 交易数量
	 * @param params
	 * @return
	 */
	Integer queryPersonTradeCount(Map<String,Object> params);


	/**
	 * 查询代理商下面的终端交易的账号
	 * @param terminalType
	 * @return
	 */
	List<LogAccount> queryTerAccountList(@Param("terminalType")Integer terminalType);

	/**
	 * 增加终端交易录入日志
	 * @param log
	 */
	void insertTerLog(@Param("ex") LogTranInfo log);

	/**
	 * 获取vip的最大主键
	 * @return
	 */
	Long getVipMax();

	/**
	 * 乐刷VIP返现
	 * @param id 主键id
	 * @param merchantNo 商户号
	 * @param sn 终端sn
	 * @param money 金额
	 * @param agentId 代理商id
	 * @param doVipTime 返现时间
	 */
	void insertVipBack(@Param("id")Long id,@Param("merchantNo")String merchantNo,@Param("sn")String sn,@Param("money")BigDecimal money,@Param("agentId")Long agentId,@Param("doVipTime")String doVipTime);

	/**
	 * 查询激活返现是否存在
	 * @param merchantNo 商户号
	 * @param doVipTime vip购买时间
	 * @return
	 */
	Integer queryVipBackByNo(@Param("merchantNo")String merchantNo,@Param("doVipTime")String doVipTime);

	/**
	 * 根据起止时间查询交易
	 * @param sn
	 * @param startDate
	 * @param endDate
	 * @return
	 */
    List<Map<String, Object>> queryListBySn(@Param("sn") String sn, @Param("startDate") String startDate,@Param("endDate") String endDate);

	/**
	 * 分页
	 * @param agentId
	 * @param start
	 * @return
	 */
    List<TranBenefitDay> listDayListByPage(@Param("agentId") Long agentId, @Param("start") Integer start);

	/**
	 * 查询sn昨天的交易
	 * @param sn
	 * @param benefitDateStr
     * @param deptId
	 * @return
	 */
	List<TranTransactionInfo> queryYesterdayListBySn(@Param("sn") String sn, @Param("benefitDate") String benefitDateStr,@Param("deptId") Long deptId);
	/**
	 * 根据sn和起止时间查询，取起不取止
	 * @param sn
	 * @param endDate
	 * @return
	 */
	List<TranTransactionInfo> queryListBySnAndTime(@Param("sn") String sn,@Param("endDate") Date endDate);

	/**
	 * 根据sn 和开始时间查询统计
	 * @param sn
	 * @param startDate
	 * @return
	 */
    Map<String,Object> querySumTranBySn(@Param("sn") String sn,@Param("startDate") Date startDate);

	/**
	 * 达标的时间
	 * @param sn
	 * @return
	 */
	List<String> queryTranAndSumList(@Param("sn") String sn);

	/**
	 *
	 * @param agentId
	 * @param s
	 * @return
	 */
	List<Map<String, Object>> queryTranByAgentGroup(@Param("agentId") Long agentId,@Param("month") String s);

	List<Map<String, Object>> querySumTranByAgentGroup(@Param("agentId") Long agentId,@Param("month") String s);

	/**
	 * 个人月总交易
	 * @param agentId
	 * @param month
	 * @return
	 */
	BigDecimal querySumTran(@Param("agentId") Long agentId, @Param("month") String month);



}
